package com.example.sid.ui.fragments.app_token

import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.example.sid.R
import com.example.sid.how_to_use.AsyncSIDFacade
import com.example.sid.utils.Utils
import kotlinx.coroutines.launch
import sberid.sdk.app_token.utils.events.AppTokenEvents

class CheckAndSubscribeAppTokenForValidFragment : Fragment(R.layout.fragment_check_and_subscribe_app_token_for_valid) {

	private val checkStatusText: TextView get() = requireView().findViewById(R.id.check_status_text)
	private val checkButton: Button get() = requireView().findViewById(R.id.check_status_button)

	override fun onStart() {
		super.onStart()

		lifecycleScope.launch {
			AsyncSIDFacade.setCustomFonts(null, null)
			checkStatusText.text = "Пока не пришли статусы, нажмите на кнопку."
			AsyncSIDFacade.subscribeToAppTokenEvents(viewLifecycleOwner) { tokenEvents ->
				when(tokenEvents){
					AppTokenEvents.HasExpire -> {
						//обрабатываем, если истёк токен
					}
					AppTokenEvents.IsValid -> {
						// Отлично, всё валидно!
					}
					AppTokenEvents.LinkIsNotValid -> Unit
					AppTokenEvents.RequireRelogin -> {
						//Перелогиниваем клиента
					}
					AppTokenEvents.ServiceError -> Unit
					AppTokenEvents.ServiceNotAvailable -> Unit
					AppTokenEvents.Success -> Unit //Заглушки, нужно обработать в угоду пользовательскому опыту и бизнес сценариям.
				}
				Utils.main.launch {
					checkStatusText.text = tokenEvents.toString()
				}
			}
		}

		checkButton.setOnClickListener {
			if (!Utils.getInitialized()){
				Toast.makeText(requireContext(), "В начале нужно проиницилизировать библиотеку", Toast.LENGTH_SHORT).show()
			}
			lifecycleScope.launch {
				AsyncSIDFacade.checkAppTokenForValid()
			}
		}
	}
}